home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 2 / MacMania 2.toast / Demo's / Tools&Utilities / Programming / Editor 2.0 / Edit.BAS next >
Encoding:
BASIC Source File  |  1994-06-07  |  49.0 KB  |  2,133 lines  |  [TEXT/ZBAS]

  1. '************************************************************
  2. '                      • TEXT-EDITOR • 
  3. '************************************************************
  4. '
  5. ' Es können ASCII-Dateien geöffnet, editiert,gesichert und
  6. ' gedruckt werden. Die maximale Textlänge beträgt 32 kByte.
  7. ' Makros können editiert und als Menüs gespeichert werden.
  8. ' Finden und Ersetzen ist einzeln und global möglich. Hilfe
  9. ' ist online verfügbar und kann eingesetzt werden. Der Editor
  10. ' verfügt über eine Seitenansicht für den Ausdruck.
  11. '
  12. '************************************************************
  13. '                       • VARIABLEN • 
  14. '************************************************************
  15.  
  16.   DIM Ascent%,Descent%,WidMax%,Leading%
  17.   DIM itype(63),ihndl&(63),irect$(63)
  18.   DIM T,L,B,R,MY,MX
  19.   DIM VT,VL,VB,VR
  20.   DIM AT,AL,AB,AR
  21.   DIM L(4)
  22.   DIM R(4)
  23.   DIM BT,BL,BB,BR
  24.   DIM CT,CL,CB,CR
  25.   DIM DT,DL,DB,DR
  26.   DIM UT,UL,UB,UR
  27.   DIM ST,SL,SB,SR
  28.   DIM FT,FL,FB,FR
  29.   DIM C$(55)
  30.   DIM M$(50)
  31.   DIM N$(50)
  32.   DIM Mt$(50)
  33.   DIM Nt$(50)
  34.   DIM Buff(256)
  35.   DIM 128 paramBlock$
  36.   DIM K%(8)
  37.   CLEAR 33000,0
  38.   C%=1
  39.   Mak=0
  40.   Undo=0
  41.   Start=1
  42.   save=0
  43.  
  44. '************************************************************
  45. '                      • FUNKTIONEN •
  46. '************************************************************
  47.  
  48. LONG FN Word
  49.   LONG IF But3=1
  50.     Chndl&=FN TEGETTEXT(Tehndl&)
  51.     adr1&=PEEK LONG(Chndl&)+new&
  52.     adr2&=PEEK LONG(Chndl&)+new&+flen&
  53.     l1=PEEK(adr1&-1)
  54.     l2=PEEK(adr2&)
  55.     LONG IF (l1<48 OR (l1>57 AND l1<65) OR (l1>90 AND l1<97) OR (l1>122 AND l1<127)) AND (l2<48 OR (l2>57 AND l2<65) OR (l2>90 AND l2<97) OR  (l2>122 AND l2<127))
  56.     XELSE
  57.       IF REF=2 THEN old&=new&+flen&:GOTO "FIND"
  58.       IF REF=3 THEN old&=new&+rlen&:GOTO "REPLACE"
  59.     END IF
  60.   END IF
  61.   IF REF=3 AND But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&)
  62.   CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&)
  63.   CALL TESETSELECT(new&,new&+flen&,Tehndl&)
  64. END FN
  65.  
  66. '------------------------------------------------------------
  67.  
  68. DEF FN Print&=PEEK LONG(PRHANDLE)
  69.  
  70. '------------------------------------------------------------
  71.  
  72. LONG FN Res&(Res$,Rnum)
  73.   Rhndl&=FN GETRESOURCE(CVI(Res$),Rnum)
  74. END FN
  75.  
  76. '------------------------------------------------------------
  77.  
  78. LONG FN PutGet(Num,Cicn,Put$)
  79.   GOSUB "CENTER DIALOG"
  80.   cicnhndl&=FN Res&(C$(7),Cicn)
  81.   CALL SETRESINFO(cicnhndl&,100,C$(15))
  82.   Iconhndl&=FN GETICON(Cicn)
  83.   CALL SETRESINFO(Iconhndl&,100,C$(15))
  84.   MY=UT:MX=UL
  85.   IF Num=100 OR Num=140 THEN CALL SFPGETFILE(MY,Put$,0,1,Type&,0,SFReply$,Num,0)
  86.   IF Num=101 THEN CALL SFPPUTFILE(MY,Put$,F$,0,SFReply$,101,0)
  87.   CALL SETRESINFO(Iconhndl&,Cicn,C$(15))
  88.   CALL SETRESINFO(cicnhndl&,Cicn,C$(15))
  89.   Adr&=VARPTR(SFReply$)
  90.   Good=PEEK(Adr&)
  91.   Len=PEEK(Adr&+10)
  92.   F$=C$(15)
  93.   FOR I=1 TO Len
  94.     F$=F$+CHR$(PEEK(Adr&+10+I))
  95.   NEXT I
  96.   IF Good=0 THEN F$=C$(15)
  97.   Vol%=PEEK WORD(Adr&+6)
  98.   GOSUB "UPDATE"
  99. END FN = Vol%
  100.  
  101. '------------------------------------------------------------
  102.  
  103. DEF FN teWord%(N)=PEEK WORD(PEEK LONG(Tehndl&)+N)
  104. DEF FN teLong&(N)=PEEK LONG(PEEK LONG(Tehndl&)+N)
  105. DEF FN Line(N)=FN teWord%(100+N)-FN teWord%(98+N)
  106. DEF FN LineLen%(Zeile)=FN teWord%(98+2*Zeile)-FN teWord%(96+2*Zeile)
  107.  
  108. '------------------------------------------------------------
  109.  
  110. DEF FN PrParm%(N)=PEEK WORD(FN Print&+N)
  111.  
  112. '------------------------------------------------------------
  113.  
  114. LONG FN teLock&
  115.   texthndl&=FN teLong&(62)               
  116. END FN=USR 3(texthndl&)
  117.  
  118. '------------------------------------------------------------
  119.  
  120. LONG FN Buffer
  121.   Bufhndl&=FN TEGETTEXT(Tehndl&)
  122.   Buflen&=FN GETHANDLESIZE(Bufhndl&)
  123. END FN
  124.  
  125. '------------------------------------------------------------
  126.  
  127. LONG FN Undo
  128.   Undohndl&=FN TEGETTEXT(Tehndl&)
  129.   Undolen&=FN GETHANDLESIZE(Undohndl&)
  130. END FN
  131.  
  132. '------------------------------------------------------------
  133.  
  134. LONG FN Format
  135.   CLS
  136.   textPtr&=FN teLock&
  137.   FOR i=0 TO FN teWord%(94)
  138.     n0=FN teWord%(96+2*i)
  139.     n1=FN teWord%(96+2*i+2)-1
  140.     n2=FN teWord%(96+2*i+2)
  141.     adr1&=textPtr&+n1
  142.     adr2&=textPtr&+n2
  143.     teChar1=PEEK(adr1&)
  144.     teChar2=PEEK(adr2&)
  145.     LONG IF CR=1
  146.       LONG IF teChar1=32
  147.         POKE adr1&,13
  148.       END IF
  149.     XELSE
  150.       LONG IF teChar2<>13 AND teChar1=13 AND n0<>n1
  151.         POKE adr1&,32
  152.       END IF
  153.     END IF
  154.   NEXT i
  155.   X&=USR 7(texthndl&)
  156. END FN
  157.  
  158. '------------------------------------------------------------
  159.  
  160. LONG FN EditToPrint
  161.   textPtr&=FN teLock&
  162.   textLen =FN teWord(60)
  163.   L=0
  164.   Zlen=FN LineLen%(L)
  165.   CLEAR INDEX 0
  166.   CLEAR textLen+600
  167.   temp$=C$(15)
  168.   textPtr&=FN teLock&
  169.   FOR I=0 TO textLen-1
  170.     teChar=PEEK(textPtr&+I)
  171.     LONG IF teChar=13
  172.       INDEX$(L)=temp$
  173.       temp$=C$(15)
  174.       L=L+1
  175.       Zlen=FN LineLen%(L)
  176.     XELSE
  177.       LONG IF LEN(temp$)<Zlen-1
  178.         temp$=temp$+CHR$(teChar)
  179.       XELSE
  180.         LONG IF Wrap=1
  181.           temp$=temp$+CHR$(13)
  182.           INDEX$(L)=temp$
  183.           temp$=C$(15)
  184.           L=L+1
  185.           Zlen=FN LineLen%(L)
  186.         END IF
  187.       END IF
  188.     END IF
  189.   NEXT I
  190.   INDEX$(L)=temp$
  191.   X&=USR 7(texthndl&)
  192. END FN=Lines
  193.  
  194. '------------------------------------------------------------
  195.  
  196. LONG FN IndexToEdit(Lines)
  197.   Mem&=MEM(-1)
  198.   Tsize&=MEM(20)
  199.   Handle&=USR 5(Tsize&)
  200.   Lock&=USR 3(Handle&)
  201.   LAdr&=Lock&
  202.   Tadr&=MEM(40)
  203.   FOR I=0 TO Lines
  204.     Length%=PEEK(Tadr&)
  205.     Tadr&=Tadr&+1
  206.     BLOCKMOVE Tadr&,Lock&,Length%
  207.     Tadr&=Tadr&+Length%
  208.     Lock&=Lock&+Length%
  209.     POKE Lock&,13
  210.     Lock&=Lock&+1
  211.   NEXT I
  212.   t&=FN teLong&(62)
  213.   X&=USR 6(t&)
  214.   X&=USR 7(Handle&)
  215.   POKE LONG PEEK LONG(Tehndl&)+62,Handle&
  216.   POKE WORD PEEK LONG(Tehndl&)+60,Lock&-LAdr&
  217.   CALL TECALTEXT(Tehndl&)
  218. END FN
  219.  
  220. '------------------------------------------------------------
  221.  
  222. LONG FN Strings(n)
  223.   Hndl&=FN GETRESOURCE(CVI("STR#"),n)
  224.   Adr&=PEEK LONG(Hndl&)+2
  225.   NumS=PEEK(Adr&-1)
  226.   Length=PEEK(Adr&)
  227.   FOR N=1 TO NumS
  228.     FOR I=1 TO Length
  229.       C$(N)=C$(N)+CHR$(PEEK(Adr&+I))
  230.     NEXT I
  231.     IF Length=0 THEN C$(N)=""
  232.     Adr&=Adr&+Length+1
  233.     Length=PEEK(Adr&)
  234.   NEXT N
  235. END FN
  236.  
  237. '------------------------------------------------------------
  238.  
  239. LONG FN Menustring(n)
  240.   MakHndl&=FN Res&(C$(13),n)
  241.   Adr&=PEEK LONG(MakHndl&)+2
  242.   NumM=PEEK(Adr&-1)
  243.   LengthN=PEEK(Adr&)
  244.   FOR N=1 TO NumM
  245.     FOR I=1 TO LengthN
  246.       N$(N)=N$(N)+CHR$(PEEK(Adr&+I))
  247.     NEXT I
  248.     IF LengthN=0 THEN N$(N)=C$(15)
  249.     Adr&=Adr&+LengthN+1
  250.     LengthM=PEEK(Adr&)
  251.     FOR I=1 TO LengthM
  252.       M$(N)=M$(N)+CHR$(PEEK(Adr&+I))
  253.     NEXT I
  254.     IF LengthM=0 THEN M$(N)=C$(15)
  255.     Adr&=Adr&+LengthM+1
  256.     LengthN=PEEK(Adr&)
  257.   NEXT N
  258. END FN
  259.  
  260. '------------------------------------------------------------
  261.  
  262. LONG FN FIND(REF)
  263.   LONG IF old&<clen&
  264.     new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&)
  265.     CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&)
  266.     CALL TESETSELECT(new&,new&+flen&,Tehndl&)
  267.     SELECT REF
  268.       CASE 1 OR 2
  269.         old&=new&+flen&
  270.         clen&=FN GETHANDLESIZE(chndl&)
  271.       CASE 3
  272.         new&=FN MUNGER(chndl&,old&,fadr&,flen&,radr&,rlen&)
  273.         CALL TESETSELECT(new&+flen&,new&+flen&,Tehndl&)
  274.         CALL TESETSELECT(new&,new&+flen&,Tehndl&)
  275.         old&=new&+flen&
  276.         clen&=FN GETHANDLESIZE(chndl&)
  277.         IF But1=1 THEN FN FIND(REF)
  278.       CASE ELSE
  279.     END SELECT
  280.   END IF
  281. END FN
  282.  
  283. '------------------------------------------------------------
  284.  
  285. LONG FN Ton
  286.   Sndhndl&=FN Res&(C$(41),128)
  287.   Err%=FN SNDPLAY(0,Sndhndl&,-1)
  288. END FN
  289.  
  290. '------------------------------------------------------------
  291.  
  292. LONG FN Links
  293.   AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  294.   CALL CLIPRECT(AT)
  295.   PEN ,,,10,25
  296.   FN Ton
  297.   WHILE FN BUTTON
  298.     CALL GETMOUSE(MY):X=MX:DELAY 10
  299.     LONG IF (MX>=Off AND MX<right-Bxnew*Unit-56)
  300.       PLOT MX,0 TO MX,WINDOW(3)-1
  301.       DO:CALL GETMOUSE(MY):UNTIL MX<>X OR FN BUTTON=0
  302.       PLOT X,0 TO X,WINDOW(3)-1
  303.     END IF
  304.   WEND
  305.   IF MX<Off THEN MX=Off
  306.   IF MX>right-Bxnew*Unit-56 THEN BEEP:MX=right-Bxnew*Unit-56
  307.   FN Ton:Mark=1
  308.   AT=25:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  309. END FN=(MX+Bxnew*Unit)
  310.  
  311. '------------------------------------------------------------
  312.  
  313. LONG FN Rechts
  314.   AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  315.   CALL CLIPRECT(AT)
  316.   PEN ,,,10,25
  317.   FN Ton
  318.   WHILE FN BUTTON
  319.     CALL GETMOUSE(MY):X=MX:DELAY 10
  320.     LONG IF (MX>left-Bxnew*Unit+56)
  321.       PLOT MX,0 TO MX,WINDOW(3)-1
  322.       DO:CALL GETMOUSE(MY):UNTIL MX<>X OR FN BUTTON=0
  323.       PLOT X,0 TO X,WINDOW(3)-1
  324.     END IF
  325.   WEND
  326.   IF MX<left-Bxnew*Unit+56 THEN BEEP:MX=left-Bxnew*Unit+56
  327.   FN Ton:Mark=1
  328.   AT=25:AL=0:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  329. END FN=(MX+Bxnew*Unit)
  330.  
  331. '------------------------------------------------------------
  332.  
  333. LONG FN Markposition
  334.   AT=14:AL=4:AB=25:AR=WINDOW(2)-1
  335.   CALL ERASERECT(AT)
  336.   posright=right-Bxnew*Unit
  337.   IF posright>=Off THEN PICTURE (posright-4,14),Marks&
  338.   posleft=left-Bxnew*Unit
  339.   IF posleft>=Off THEN PICTURE (posleft-4,14),Marks&
  340. END FN
  341.  
  342. '------------------------------------------------------------
  343.  
  344. LONG FN Lineal(Unit,Start)
  345.   PICTURE ON
  346.   AT=0:AL=4:AB=12:AR=WINDOW(2)-1
  347.   CALL CLIPRECT(AT)
  348.   CALL ERASERECT(AT)
  349.   TEXT 3,9,0,0
  350.   FOR I=0 TO (WINDOW(2))/Unit
  351.     PLOT Unit*I+Off,12 TO Unit*I+Off,2
  352.     IF I+Start< 10 THEN PRINT %(1+Unit*I+Off,8) I+Start;CHR$(32)
  353.     IF I+Start>=10 THEN PRINT %(1+Unit*I+Off,8) I+Start
  354.     FOR J=1 TO 3
  355.       PLOT Unit*I+(Unit/4)*J+Off,12 TO Unit*I+(Unit/4)*J+Off,9
  356.     NEXT J
  357.   NEXT I
  358.   PICTURE OFF,Lin&
  359.   AT=0:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  360.   CALL CLIPRECT(AT)
  361.   TEXT FONTNUMBER,FONTSIZE,0,1
  362. END FN=Lin&
  363.  
  364. '------------------------------------------------------------
  365.  
  366. LONG FN openParams(fileName$,ioVRefNum%)
  367.   hParmBlkPtr&=VARPTR(paramBlock$)
  368.   ioNamePtr&=VARPTR(fileName$)
  369.   POKE LONG hParmBlkPtr&+18,ioNamePtr&
  370.   POKE WORD hParmBlkPtr&+22,ioVRefNum%
  371.   OSerr=FN SETVOL(hParmBlkPtr&)
  372.   OSerr=FN GETFILEINFO(hParmBlkPtr&)
  373.   ResFileRef%=FN OPENRFPERM(fileName$,ioVRefNum%,0)
  374. END FN=ResFileRef%
  375.  
  376. '------------------------------------------------------------
  377.  
  378. LONG FN saveParams(fileName$,Type$,ioVRefNum%)
  379.   hParmBlkPtr&=VARPTR(paramBlock$)
  380.   ioNamePtr&=VARPTR(fileName$)
  381.   POKE LONG hParmBlkPtr&+18,ioNamePtr&
  382.   POKE WORD hParmBlkPtr&+22,ioVRefNum%
  383.   OSerr=FN DELETE(hParmBlkPtr&)
  384.   OSerr=FN SETVOL(hParmBlkPtr&)
  385.   CALL CREATERESFILE(fileName$)
  386.   POKE LONG hParmBlkPtr&+18,ioNamePtr&
  387.   OSerr=FN GETFILEINFO(hParmBlkPtr&)
  388.   POKE LONG hParmBlkPtr&+32,CVI(Type$)
  389.   POKE LONG hParmBlkPtr&+36,CVI(C$(43))
  390.   OSerr=FN SETFILEINFO(hParmBlkPtr&)
  391.   ResFileRef%=FN OPENRFPERM(fileName$,ioVRefNum%,0)
  392. END FN=ResFileRef%
  393.  
  394. '------------------------------------------------------------
  395.  
  396. LONG FN WriteStyle
  397.   Type$=C$(8)
  398.   Ref%=FN saveParams(F$,Type$,Vol%)
  399.   Style$=MKI$(4)+MKI$(FONTSIZE)+MKI$(FONTNUMBER)+MKI$(left)+MKI$(right)
  400.   Len&=LEN(Style$)
  401.   Adr&=VARPTR(Style$)+1
  402.   Shndl&=FN NEWHANDLE(Len&)
  403.   Sadr&=USR 3(Shndl&)
  404.   BLOCKMOVE Adr&,Sadr&,Len&
  405.   Sadr&=USR 7(Shndl&)
  406.   CALL ADDRESOURCE(Shndl&,CVI(C$(42)),128,C$(15))
  407.   CALL UPDATERESFILE(Ref%)
  408.   CALL CLOSERESFILE(Ref%)
  409. END FN
  410.  
  411. '------------------------------------------------------------
  412.  
  413. LONG FN ReadStyle
  414.   Stylhndl&=FN Res&(C$(42),128)
  415.   LONG IF Stylhndl&
  416.     Adr&=PEEK LONG(Stylhndl&)
  417.     FONTSIZE=PEEK WORD(Adr&+2)
  418.     FONTNUMBER=PEEK WORD(Adr&+4)
  419.     left=PEEK WORD(Adr&+6)
  420.     right=PEEK WORD(Adr&+8)
  421.   XELSE
  422.     left=VAL(C$(44)):right=VAL(C$(45))
  423.     FONTNUMBER=4:FONTSIZE=9
  424.   END IF
  425. CALL CLOSERESFILE(Ref%)
  426. END FN
  427.  
  428. '************************************************************
  429. '                    • INITIALISIERUNG •
  430. '************************************************************
  431.  
  432.   WINDOW OFF:COORDINATE WINDOW:DEF MOUSE=1:WIDTH=-2
  433.   RefNum%=FN OPENRESFILE("Edit.Res")
  434.   FN Strings(128)
  435.   FN Menustring(128)
  436.   Marks&=FN GETPICTURE(134)
  437.   GOSUB "SET MENU"
  438.   GOSUB"BUILD WINDOW"
  439.   GOSUB "FINDER"
  440.   GOTO "EVENT QUEUE"
  441.  
  442. '************************************************************
  443. '                     • CENTER DIALOG • 
  444. '************************************************************
  445.  
  446. "CENTER DIALOG"
  447.   Hndl&=FN Res&(C$(11),Num)
  448.   Dadr&=PEEK LONG(Hndl&)
  449.   T=PEEK WORD(Dadr&+0)
  450.   L=PEEK WORD(Dadr&+2)
  451.   B=PEEK WORD(Dadr&+4)
  452.   R=PEEK WORD(Dadr&+6)
  453.   GOSUB "CALC SCREEN"
  454.   Hor=R-L:Ver=B-T
  455.   LONG IF Num<>132
  456.     UT=(SB-Ver)/2:UL=(SR-Hor)/2:UB=UT+Ver:UR=UL+Hor
  457.   XELSE
  458.     UT=SB-Ver-50:UL=(SR-Hor)/2:UB=UT+Ver:UR=UL+Hor
  459.   END IF
  460.   L=UL-30:R=UR+30:T=UT-80:B=UB+40
  461.   CALL GLOBALTOLOCAL(T)
  462.   POKE WORD PEEK LONG(Hndl&),UT
  463.   POKE WORD PEEK LONG(Hndl&)+2,UL
  464.   POKE WORD PEEK LONG(Hndl&)+4,UB
  465.   POKE WORD PEEK LONG(Hndl&)+6,UR
  466. RETURN
  467.  
  468. '************************************************************
  469. '                 • Calculate Screen Size • 
  470. '************************************************************
  471.  
  472. "CALC SCREEN"
  473.   CALL GETWMGRPORT(WMGRPORT&)
  474.   ST=PEEK WORD(WMGRPORT&+8)
  475.   SL=PEEK WORD(WMGRPORT&+10)
  476.   SB=PEEK WORD(WMGRPORT&+12)
  477.   SR=PEEK WORD(WMGRPORT&+14)
  478. RETURN
  479.  
  480. '************************************************************
  481. '                       • THE QUEUE • 
  482. '************************************************************
  483.  
  484. "EVENT QUEUE"
  485.   ON DIALOG GOSUB "HANDLE DIALOG":DIALOG ON
  486.   ON MENU   GOSUB "HANDLE MENU"  :MENU   ON
  487.   ON MOUSE  GOSUB "HANDLE MOUSE" :MOUSE  ON
  488.  
  489. "LOOP"
  490.   LONG IF Wptr&
  491.     LONG IF VL>VR-30
  492.       DO
  493.         IF VL>=12 THEN VL=VL-8:DL=DL-8
  494.       UNTIL VL<=VR-30
  495.       GOSUB "FORMAT WINDOW"
  496.     END IF
  497.     GOSUB "CHECK MENU"
  498.     LONG IF Tehndl&
  499.       CALL TEIDLE(Tehndl&)
  500.       textLen=FN teWord%(60)
  501.       IF textLen=0 THEN Durty=0
  502.     END IF
  503.     MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2)
  504.     CALL GETKEYS(K%(1))
  505.     LONG IF FN PTINRECT(MY,VT)
  506.       CURSOR=1
  507.     XELSE
  508.       CURSOR=0
  509.     END IF
  510.   XELSE
  511.     CURSOR=0
  512.   END IF
  513.   GOTO"LOOP"
  514.   DIALOG OFF:MOUSE OFF:MENU OFF
  515.  
  516. '************************************************************
  517. '                     • DIALOG ROUTINES • 
  518. '************************************************************
  519.  
  520. "HANDLE DIALOG"
  521.   ACT=DIALOG(0):REF=DIALOG(ACT)
  522.   LONG IF Wptr&
  523.     IF ACT=1THEN GOSUB "SCROLL TEXT"
  524.     IF ACT=3 THEN WINDOW(REF):RETURN
  525.     IF ACT=4 THEN GOSUB "SCHLIESSEN"
  526.     IF ACT=5 THEN "FORMAT WINDOW"
  527.     LONG IF Tehndl&
  528.       LONG IF ACT=16
  529.         SELECT REF
  530.           CASE 1
  531.             CALL TEPINSCROLL(0,Lines*Hoch,Tehndl&)
  532.             Bnew=BUTTON(1)-Lines
  533.             IF Bnew<0 THEN Bnew=0
  534.             SCROLL BUTTON 1,Bnew
  535.             Bold=Bnew
  536.           CASE 4
  537.             CALL TEPINSCROLL(0,-Lines*Hoch,Tehndl&)
  538.             Bnew=BUTTON(1)+Lines
  539.             IF Bnew>Lines THEN Bnew=Lines
  540.             SCROLL BUTTON 1,Bnew
  541.             Bold=Bnew
  542.           CASE 5
  543.             GOSUB "HELP"
  544.           CASE 11
  545.             CALL TEPINSCROLL(0,Seite,Tehndl&)
  546.             Bnew=BUTTON(1)-Zeilen
  547.             IF Bnew<0 THEN Bnew=0
  548.             SCROLL BUTTON 1,Bnew
  549.             Bold=Bnew
  550.           CASE 12
  551.             CALL TEPINSCROLL(0,-Seite,Tehndl&)
  552.             Bnew=BUTTON(1)+Zeilen
  553.             IF Bnew>Lines THEN Bnew=Lines
  554.             SCROLL BUTTON 1,Bnew
  555.             Bold=Bnew
  556.           CASE ELSE
  557.             IF FN teWord%(60)+1>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "EVENT QUEUE"
  558.             FN Buffer
  559.             LONG IF Insert
  560.               IF REF<>8 THEN POKE WORD PEEK LONG(Tehndl&)+34,FN teWord%(32)+1
  561.             END IF
  562.             CALL TEKEY(REF,Tehndl&)
  563.             IF NOT (REF=30 OR REF=31) THEN Durty=1
  564.             GOSUB "SCROLL ADJUST"
  565.         END SELECT
  566.       END IF
  567.     END IF
  568.   END IF
  569. RETURN
  570.  
  571. '************************************************************
  572. '                     • TEXT SCROLLING • 
  573. '************************************************************
  574.  
  575. "SCROLL TEXT"
  576.  
  577. LONG IF REF=1
  578.   Bnew=BUTTON(1)
  579.   DY=Hoch*(Bold-Bnew)
  580.   CALL TESCROLL(0,DY,Tehndl&)
  581.   Bold=Bnew
  582.   GOSUB "SCROLL ADJUST"
  583. XELSE
  584.   Bxnew=BUTTON(2)
  585.   DX=Bxold-Bxnew
  586.   IF Bxnew<0 OR Bxnew>1440/Unit THEN DX=0
  587.   TEXT 3,9,0,0
  588.   FOR I=0 TO (WINDOW(2))/Unit
  589.     IF I+Bxnew< 10 THEN PRINT %(1+Unit*I+Off,8) I+Bxnew;CHR$(32)
  590.     IF I+Bxnew>=10 THEN PRINT %(1+Unit*I+Off,8) I+Bxnew
  591.   NEXT I
  592.   TEXT FONTNUMBER,FONTSIZE,0,1
  593.   GOSUB "SHORT UPDATE"
  594.   Bxold=Bxnew
  595. END IF
  596. RETURN
  597.  
  598. '************************************************************
  599. '                     • SCROLL ADJUST • 
  600. '************************************************************
  601.  
  602. "SCROLL ADJUST"
  603.   Lines=FN teWord%(94)
  604.   Zeilen=(WINDOW(3)-30)/Hoch
  605.   Seite=Zeilen*Hoch
  606.   IF Bnew>Lines-Zeilen THEN Bnew=Lines-Zeilen
  607.   LONG IF Lines>Zeilen
  608.     SCROLL BUTTON 1,Bnew,0,Lines-Zeilen,Zeilen-1,,1
  609.   XELSE
  610.     SCROLL BUTTON 1,0,0,0,Zeilen-1,,1
  611.     CALL TESCROLL(0,Hoch*Bold,Tehndl&)
  612.   END IF
  613.  
  614. "ARROW SCROLL"
  615.   NLine=(FN teWord%(16)-VT)/Hoch
  616.   DY=Hoch
  617.   LONG IF NLine=Zeilen AND (REF=31 OR REF=13)
  618.     Bnew=BUTTON(1)+1
  619.     IF Bnew>Lines THEN Bnew=Lines:DY=0
  620.     SCROLL BUTTON 1,Bnew
  621.     CALL TEPINSCROLL(0,-DY,Tehndl&)
  622.     Bold=Bnew
  623.   END IF
  624.   LONG IF NLine=0 AND REF=30
  625.     Bnew=BUTTON(1)-1
  626.     IF Bnew<0 THEN Bnew=0:DY=0
  627.     SCROLL BUTTON 1,Bnew
  628.     CALL TEPINSCROLL(0,DY,Tehndl&)
  629.     Bold=Bnew
  630.   END IF
  631.   Reihen=WINDOW(2)/6
  632.   LONG IF Lines=0
  633.     SCROLL BUTTON 2,0,0,0,0,,2
  634.   XELSE
  635.     SCROLL BUTTON 2,Bxnew,0,1440/Unit,5,,2
  636.   END IF
  637. RETURN
  638.  
  639. '************************************************************
  640. '                     • MOUSE ROUTINES • 
  641. '************************************************************
  642.  
  643. "HANDLE MOUSE"
  644.  
  645.   MACT=MOUSE(0):MX=MOUSE(1):MY=MOUSE(2)
  646.   CALL GETKEYS(K%(1))
  647.   LONG IF K%(4)=4
  648.     CURSOR=0
  649.     Menhndl&=BASHANDLE&
  650.     GOSUB "POPUP"
  651.     RETURN
  652.   END IF
  653.  
  654.   LONG IF WINDOW(0)=1
  655.     LONG IF FN PTINRECT(MY,VT)
  656.       LONG IF K%(4)<>1
  657.         CALL TECLICK(MY,0,Tehndl&)
  658.       XELSE
  659.         CALL TECLICK(MY,1,Tehndl&)
  660.       END IF
  661.     END IF
  662.  
  663.     L(1)=0:L(2)=4:L(3)=12:L(4)=WINDOW(2)
  664.     LONG IF FN PTINRECT(MY,L(1))
  665.       IF Unit=28 THEN Unit=72 ELSE Unit=28
  666.       Lin&=FN Lineal(Unit,Bxnew)
  667.       PICTURE,Lin&
  668.       GOSUB "SCROLL ADJUST"
  669.       RETURN
  670.     END IF
  671.  
  672.     R(1)=13:R(2)=4:R(3)=22:R(4)=WINDOW(2)-1
  673.     L(1)=13:L(2)=left-Bxnew*Unit-4:L(3)=24:L(4)=left-Bxnew*Unit+4
  674.     LONG IF FN PTINRECT(MY,L(1))
  675.       left=FN Links
  676.       CALL INVALRECT(AT):Mark=2
  677.       GOSUB "SCROLL ADJUST"
  678.     END IF
  679.     L(1)=13:L(2)=right-Bxnew*Unit-4:L(3)=24:L(4)=right-Bxnew*Unit+4
  680.     LONG IF FN PTINRECT(MY,L(1))
  681.       right=FN Rechts
  682.       CALL INVALRECT(AT):Mark=2
  683.       GOSUB "SCROLL ADJUST"
  684.     END IF
  685.  
  686.   END IF
  687. RETURN
  688.  
  689. '************************************************************
  690. '                     • POPUP ROUTINES • 
  691. '************************************************************
  692.  
  693. "POPUP"
  694.   CALL INSERTMENU(Menhndl&,-1)
  695.   T=MY-5:L=MX-34
  696.   CALL LOCALTOGLOBAL(T)
  697.   Result=FN POPUPMENUSELECT(Menhndl&,T,L,Item)
  698.   CALL GLOBALTOLOCAL(T)
  699.   ITEMID=FN LOWORD(Result)
  700.   IF ITEMID=0 THEN RETURN
  701.   GOSUB "BASIC"
  702.   GOSUB "SCROLL ADJUST"
  703. RETURN
  704.  
  705. '************************************************************
  706. '                      • MENU ROUTINES • 
  707. '************************************************************
  708.  
  709. "HANDLE MENU"
  710.   MENUID=MENU(0):ITEMID=MENU(1)
  711.   CALL HILITEMENU(0)
  712.   LONG IF MENUID=128
  713.     LONG IF ITEMID<3
  714.       IF ITEMID=1 THEN GOSUB "INFO"
  715.       IF ITEMID=2 THEN GOSUB "HELP"
  716.     XELSE
  717.       CALL GETITEM(DAHANDLE&,ITEMID,DA$)
  718.       X&=FN OPENDESKACC(DA$)
  719.     END IF
  720.     RETURN
  721.   END IF
  722.   ON MENUID GOTO "DATEI","ARBEIT","EXTRAS","FONT","GRÖßE","BASIC"
  723.  
  724. '------------------------------------------------------------
  725.  
  726. "DATEI"
  727.   ON ITEMID GOTO "NEU","ÖFFNEN","SCHLIESSEN","NO OP","SICHERN","SICHERN ALS","NO OP","FORMAT","ANSICHT","DRUCKEN","NO OP","TRANSFER","ENDE"
  728.  
  729. '------------------------------------------------------------
  730.  
  731. "NEU"
  732.   GOSUB "SAVE ALERT"
  733.   LONG IF Wptr&
  734.     CALL TEDISPOSE(Tehndl&)
  735.     Tehndl&=0
  736.     WINDOW CLOSE 1
  737.     Wptr&=0
  738.     X&=MEM(-1)
  739.   END IF
  740.   GOSUB "BUILD WINDOW"
  741.   GOSUB "CHANGE MENU"
  742.   GOSUB "PICT"
  743. RETURN
  744.  
  745. '------------------------------------------------------------
  746.  
  747. "FINDER"
  748.   A%=FINDERINFO(C%,F$,T&,Vol%)
  749.   IF C% AND T&=CVI(C$(8)) THEN GOSUB "FINDEROPEN"
  750. RETURN
  751.  
  752. '------------------------------------------------------------
  753.  
  754. "ÖFFNEN"
  755.   LONG IF Wptr&
  756.     GOSUB "SAVE ALERT"
  757.   XELSE
  758.     GOSUB "NEU"
  759.   END IF
  760.   CLEAR INDEX$
  761.   Num=100
  762.   Cicn=130
  763.   Type&=CVI(C$(8))
  764.   Put$=C$(1)
  765.   Vol%=FN PutGet(Num,Cicn,Put$)
  766.   IF F$=C$(15) THEN RETURN
  767.  
  768. '------------------------------------------------------------
  769.  
  770. "FINDEROPEN"
  771.   Ref%=FN openParams(F$,Vol%)
  772.   OPEN "I",1,F$,1,Vol%
  773.   LONG IF LOF(1)>VAL(C$(25))
  774.     Alert$=STR$(LOF(1)-VAL(C$(25)))
  775.     CLOSE 1
  776.     GOSUB "FILE TOO LARGE"
  777.     RETURN
  778.   END IF
  779.   FN ReadStyle
  780.   CLEAR LOF(1)+100
  781.   len&=LOF(1)
  782.   chndl&=FN NEWHANDLE(len&)
  783.   cadr&=USR 3(chndl&)
  784.   READ FILE 1,cadr&,len&
  785.   CALL TESETTEXT(cadr&,len&,Tehndl&)
  786.   cadr&=USR 7(chndl&)
  787.   CLOSE 1
  788.   CALL GETFONTNAME(FONTNUMBER,Name$)
  789.   FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&)
  790.     MENU 4,X,1
  791.     CALL GETITEM(FONTHANDLE&,X,FONTNAME$)
  792.     IF FONTNAME$=Name$ THEN MENU 4,X,2
  793.   NEXT X
  794.   FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&)
  795.     MENU 5,X,1
  796.     CALL GETITEM(SIZEHANDLE&,X,SIZE$)
  797.     IF FONTSIZE=VAL(SIZE$) THEN MENU 5,X,2
  798.   NEXT X
  799.   CALL GETFNUM(Name$,FONTNUMBER)
  800.   GOSUB "OUTLINE"
  801.   GOSUB "NEW TEXT"
  802.   WINDOW 1,F$
  803.   Bold=0
  804.   Bnew=0
  805.   Bxnew=0
  806.   Mark=0
  807.   GOSUB "SCROLL ADJUST"
  808. RETURN
  809.  
  810. '------------------------------------------------------------
  811.  
  812. "SCHLIESSEN"
  813.   LONG IF Wptr&
  814.     Wnd=0
  815.     GOSUB "SAVE ALERT"
  816.     CALL TEDISPOSE(Tehndl&)
  817.     Tehndl&=0
  818.     WINDOW CLOSE 1
  819.     Wptr&=0
  820.     X&=MEM(-1)
  821.     CURSOR=0
  822.     Durty=0
  823.   END IF
  824.   GOSUB "CHANGE MENU"
  825. RETURN
  826.  
  827. '------------------------------------------------------------
  828.  
  829. "SICHERN ALS"
  830.   Num=101
  831.   Cicn=130
  832.   Type&=CVI(C$(8))
  833.   Put$=C$(2)
  834.   Vol%=FN PutGet(Num,Cicn,Put$)
  835.   IF F$=C$(15) THEN GOTO "EVENT QUEUE"
  836.   GOSUB "SCHREIBEN"
  837. RETURN
  838.  
  839. '------------------------------------------------------------
  840.  
  841. "SICHERN"
  842.   CALL GETWTITLE(Wptr&,F$)
  843.   LONG IF F$=C$(3)
  844.     GOSUB "SICHERN ALS"
  845.   END IF
  846.  
  847. "SCHREIBEN"
  848.   Hndl&=FN GET1RESOURCE(CVI(C$(42)),128)
  849.   IF Hndl& THEN CALL RMVERESOURCE(Hndl&)
  850.   FN WriteStyle
  851.   DEF OPEN C$(10)
  852.   OPEN "O",1,F$,1,Vol%
  853.   LONG IF Wrap=1
  854.     CR=1
  855.     FN Format
  856.   END IF
  857.   texthndl&=FN TEGETTEXT(Tehndl&)
  858.   textPtr&=USR 3(texthndl&)
  859.   textLen&=FN GETHANDLESIZE(texthndl&)
  860.   WRITE FILE #1,textPtr&,textLen&
  861.   textPtr&=USR 7(texthndl&)
  862.   CLOSE 1
  863.   WINDOW 1,F$
  864.   GOSUB "FORMAT WINDOW"
  865.   save=1
  866.   Durty=0
  867. RETURN
  868.  
  869. '------------------------------------------------------------
  870.  
  871. "FORMAT"
  872.   GOSUB "CALC SCREEN"
  873.   Num=-8192
  874.   GOSUB "CENTER DIALOG"
  875.   DEF PAGE
  876.   T=DT:L=DL:B=DB:R=DR
  877.   GOSUB "PICT"
  878.   GOSUB "UPDATE"
  879.   IF PRCANCEL THEN RETURN
  880. RETURN
  881.  
  882. '------------------------------------------------------------
  883.  
  884. "ANSICHT"
  885. CALL GETWTITLE(Wptr&,F$)
  886. CURSOR=0
  887. Num=139
  888. GOSUB "CENTER DIALOG"
  889. Dloghndl&=FN GETNEWDIALOG(Num,0,-1)
  890. Winptr&=FN FRONTWINDOW
  891. CALL SETPORT(Winptr&)
  892.   VPR =PEEK WORD(FN Print&+26)
  893.   HPR =PEEK WORD(FN Print&+28)
  894.   PRY1=PEEK WORD(FN Print&+ 8)
  895.   PRX1=PEEK WORD(FN Print&+10)
  896.   PRY2=PEEK WORD(FN Print&+12)
  897.   PRX2=PEEK WORD(FN Print&+14)
  898.   PDY1=PEEK WORD(FN Print&+16)
  899.   PDX1=PEEK WORD(FN Print&+18)
  900.   PDY2=PEEK WORD(FN Print&+20)
  901.   PDX2=PEEK WORD(FN Print&+22)
  902.   F=2:px!=HPR/120:py!=VPR/120
  903.   px!=px!*2.54:py!=py!*2.54:Unit$=C$(28)
  904.   Scx!=60*HPR/(PDX2-PDX1)
  905.   Scy!=60*VPR/(PDY2-PDY1)
  906.   Sc=SQR(Scx!*Scy!)
  907.   H$=C$(29):V$=C$(31)
  908.   IF px!<10 THEN H$=C$(30)
  909.  
  910. '----------------------------------------
  911.  
  912. "GREATER"
  913.   H=Sc*(PDX2-PDX1)/(F*100):WX=375
  914.   V=Sc*(PDY2-PDY1)/(F*100):WY=294
  915.   LONG IF H>WX OR V>WY
  916.     F=F+1:GOTO "GREATER"
  917.   END IF
  918.   PEN ,,,,3:WIDTH=-2
  919.   BOX FILL 1,1 TO WX-1,WY-1
  920.   CALL PENNORMAL
  921.   BOX 0,0 TO WX,WY
  922.   DX=(WX-H)/2:DY=(WY-V)/2
  923.   BOX DX,DY TO DX+H,DY+V
  924.   PEN 2,2
  925.   PLOT DX+H,DY+2 TO DX+H,DY+V
  926.   PLOT DX+2,DY+V TO DX+H,DY+V
  927.   BT=DY+1:BL=DX+1:BB=BT+V-2:BR=BL+H-2
  928.   CALL ERASERECT(BT)
  929.   H=Sc*(PRX2-PRX1)/(F*100):V=Sc*(PRY2-PRY1)/(F*100)
  930.   DX=(WX-H)/2:DY=(WY-V)/2
  931.   PEN 1,1,,,3
  932.   BOX DX,DY TO DX+H,DY+V
  933.   Lines=FN EditToPrint
  934.   TEXT FONTNUMBER,FONTSIZE,0,1
  935.   U$=CHR$(45)
  936.   u!=FN STRINGWIDTH(U$)
  937.   n=(right-left)/u!
  938.   U$=CHR$(32)
  939.   v!=FN STRINGWIDTH(U$)
  940.   E$=F$+C$(6)+STR$(P)
  941.   e!=FN STRINGWIDTH(E$)
  942.   m=(right-left-e!)/v!
  943.   SIZE=Sc*FONTSIZE/(F*100)
  944.   Hight!=Sc*Hoch/(F*100)
  945.   LRand=Sc*(left-Off)/(F*100)
  946.   PageLines=V/Hight!-1
  947.   IF footer=1 THEN PageLines=PageLines-4
  948.   LONG IF Lines MOD PageLines=0
  949.     Pages=Lines/PageLines
  950.   XELSE
  951.     Pages=Lines/PageLines+1
  952.   END IF
  953.   BT=DY+1:BL=DX+1:BB=BT+V-2:BR=BL+H-2:P=1
  954.  
  955. '----------------------------------------
  956.  
  957. "NEXT PAGE"
  958.   CALL ERASERECT(BT)
  959.   TEXT 3,9,4,0
  960.   PRINT %(405,140) C$(35)
  961.   TEXT 3,9,0,0
  962.   PRINT %(408,160) H$;USING C$(47);px!;Unit$
  963.   PRINT %(408,175) V$;USING C$(47);py!;Unit$
  964.   PRINT %(398,248) C$(36);STR$(Sc)+C$(32)
  965.   PRINT %(398,268) C$(33);USING C$(52);P;C$(34);USING C$(52);Pages;CHR$(32)
  966.   BOX DX,DY TO DX+H,DY+V
  967.   CT=0:CL=0:CB=DY+V-1:CR=DX+H-1
  968.   CALL GLOBALTOLOCAL(CT)
  969.   CALL CLIPRECT(CT)
  970.   TEXT FONTNUMBER,SIZE,0,1
  971.   FOR I=0 TO PageLines-1
  972.     PRINT %(LRand+DX,(I+1)*Hight!+DY+1) INDEX$(I+(P-1)*PageLines)
  973.   NEXT I
  974.   LONG IF footer=1
  975.     D$=F$+STRING$(m,CHR$(32))+C$(6)+STR$(P)
  976.     PRINT %(LRand+DX,(PageLines+2)*Hight!+DY+1) STRING$(n,CHR$(45))
  977.     PRINT %(LRand+DX,(PageLines+3)*Hight!+DY+1) D$
  978.   END IF
  979.   CT=0:CL=0:CB=300:CR=495
  980.   CALL GLOBALTOLOCAL(CT)
  981.   CALL CLIPRECT(CT)
  982.  
  983. "CHOOSE PAGE"
  984.   CALL MODALDIALOG(0,REF)
  985.   IF REF=3 AND P<Pages THEN P=P+1:GOTO "NEXT PAGE"
  986.   IF REF=2 AND P>1 THEN P=P-1:GOTO "NEXT PAGE"
  987.   LONG IF REF=2 OR REF=3
  988.     IF REF=3 AND P=Pages THEN P=1
  989.     IF REF=2 AND P=1 THEN P=Pages
  990.     GOTO "NEXT PAGE"
  991.   END IF
  992.   CALL DISPOSDIALOG(Dloghndl&)
  993.   CALL SETPORT(Wptr&)
  994.   VR=posright:DR=VR
  995.   POKE WORD PEEK LONG(Tehndl&)+6,DR
  996.   POKE WORD PEEK LONG(Tehndl&)+14,VR
  997.   GOSUB "PICT"
  998.   GOSUB "UPDATE"
  999.   X&=MEM(-1)
  1000. RETURN
  1001.  
  1002. '------------------------------------------------------------
  1003.  
  1004. "DRUCKEN"
  1005.   GOSUB "CALC SCREEN"
  1006.   Num=-8191
  1007.   GOSUB "CENTER DIALOG"
  1008.   DEF LPRINT
  1009.   T=DT:L=DL:B=DB:R=DR
  1010.   GOSUB "UPDATE"
  1011.   IF PRCANCEL THEN GOTO "DRUCK CLOSE"
  1012.   Lines=FN EditToPrint
  1013.   TRand=-FN PrParm%(16) 
  1014.   LRand=-FN PrParm%(18) 
  1015.   BRand=FN PrParm%(20) 
  1016.   RRand=FN PrParm%(22)
  1017.   Pmin=FN PrParm%(62) 
  1018.   Pmax=FN PrParm%(64)
  1019.   fnumber=FONTNUMBER:fsize=FONTSIZE
  1020.   TEXT fnumber,fsize,0,0
  1021.   CALL GETFONTINFO(Ascent%)
  1022.   Hight=Ascent+Descent+Leading
  1023.   PageLines=(BRand-TRand)/Hight-1
  1024.   IF footer=1 THEN PageLines=PageLines-4
  1025.   IF Lines MOD PageLines>0 THEN Corr=1 ELSE Corr=0
  1026.   Pages=Lines/PageLines+Corr
  1027.   IF Pages=0 THEN Pages=1
  1028.   LONG IF Pmax=9999
  1029.     POKE WORD PEEK LONG(PRHANDLE)+64,Pages
  1030.     Pmax=Pages
  1031.   END IF
  1032.   CURSOR=0
  1033.   Num=132
  1034.   GOSUB "CENTER DIALOG"
  1035.   Dloghndl&=FN GETNEWDIALOG(Num,0,-1)
  1036.   FOR P=1 TO Pages
  1037.     A$=STR$(Pmin):B$=STR$(Pmax)
  1038.     CALL PARAMTEXT(A$,B$,C$(15),C$(16))
  1039.     CALL DRAWDIALOG(Dloghndl&)
  1040.     IF Pmin<Pmax THEN Pmin=Pmin+1
  1041.     CALL GETKEYS(K%(1))
  1042.     IF K(4)=-32768 THEN GOTO "DRUCK ENDE"
  1043.     FOR I=0 TO PageLines-1
  1044.       LPRINT %(VL-12,(I+1)*Hight) INDEX$(I+(P-1)*PageLines)
  1045.     NEXT I
  1046.     LONG IF footer=1
  1047.       D$=C$(6)+STR$(P)
  1048.       U$=CHR$(95)
  1049.       u=FN STRINGWIDTH(U$)
  1050.       n=(right-left)/u
  1051.       Rechts=right-left-FN STRINGWIDTH(D$)
  1052.       LPRINT %(VL-12,(PageLines+2)*Hight) STRING$(n,CHR$(95))
  1053.       LPRINT %(VL-12,(PageLines+3)*Hight) F$;
  1054.       LPRINT %(VL-12+Rechts,(PageLines+3)*Hight) D$
  1055.     END IF
  1056.     CLEAR LPRINT
  1057.   NEXT P
  1058.  
  1059. "DRUCK ENDE"
  1060.   CLOSE LPRINT
  1061.   DELAY 500
  1062.   CALL DISPOSDIALOG(Dloghndl&)
  1063.   T=DT:L=DL:B=DB:R=DR
  1064. "DRUCK CLOSE"
  1065.   GOSUB "PICT"
  1066.   GOSUB "UPDATE"
  1067. RETURN
  1068.  
  1069. '------------------------------------------------------------
  1070.  
  1071. "NO OP"
  1072. RETURN
  1073.  
  1074. '------------------------------------------------------------
  1075.  
  1076. "TRANSFER"
  1077.   GOSUB "SAVE ALERT"
  1078.   GOSUB "SAVE MAKRO"
  1079.   Num=140
  1080.   Hndl&=FN Res&(C$(11),Num)
  1081.   Cicn=129
  1082.   Type&=CVI(C$(27))
  1083.   Put$=C$(1)
  1084.   Vol%=FN PutGet(Num,Cicn,Put$)
  1085.   IF F$=C$(15) THEN RETURN
  1086.   RUN F$,Vol%
  1087.  
  1088. '------------------------------------------------------------
  1089.  
  1090. "ENDE"
  1091.   GOSUB "SAVE ALERT"
  1092.   GOSUB "SAVE MAKRO"
  1093.   END
  1094. RETURN
  1095.  
  1096. '------------------------------------------------------------
  1097.  
  1098. "SAVE MAKRO"
  1099.   LONG IF Mak=1
  1100.     CLEAR INDEX$
  1101.     FOR I=1 TO NumM
  1102.       INDEX$(2*I-2)=N$(I)
  1103.       INDEX$(2*I-1)=M$(I)
  1104.     NEXT I
  1105.     Len&=MEM(20)
  1106.     Adr&=MEM(40)
  1107.     Shndl&=FN NEWHANDLE(Len&+2)
  1108.     Sadr&=USR 3(Shndl&)
  1109.     BLOCKMOVE Adr&,Sadr&+2,Len&
  1110.     POKE WORD Sadr&,NumM
  1111.     Ref%=PEEK WORD(&900)
  1112.     CALL USERESFILE(Ref%)
  1113.     CALL RMVERESOURCE(MakHndl&)
  1114.     CALL ADDRESOURCE(Shndl&,CVI(C$(13)),128,C$(14))
  1115.     Sadr&=USR 7(Shndl&)
  1116.   END IF
  1117. RETURN
  1118.  
  1119. '------------------------------------------------------------
  1120.  
  1121. "ARBEIT"
  1122. ON ITEMID GOTO "ZURÜCK","NO OP","SCHNEIDEN","KOPIEREN","EINSETZEN","LÖSCHEN","NO OP","AUSWAHL"
  1123.  
  1124. '------------------------------------------------------------
  1125.  
  1126. "ZURÜCK"
  1127.   X&=MEM(-1)
  1128.   LONG IF Undo=0
  1129.     FN Undo
  1130.     Bufadr&=USR 3(Bufhndl&)
  1131.     CALL TESETTEXT(Bufadr&,Buflen&,Tehndl&)
  1132.     Bufadr&=USR 7(Bufhndl&)
  1133.   XELSE
  1134.     FN Buffer
  1135.     Undoadr&=USR 3(Undohndl&)
  1136.     CALL TESETTEXT(Undoadr&,Undolen&,Tehndl&)
  1137.     Undoadr&=USR 7(Undohndl&)
  1138.   END IF
  1139.   CLS
  1140.   CALL TECALTEXT(Tehndl&)
  1141.   CALL TEUPDATE(VT,Tehndl&)
  1142.   GOSUB "SCROLL ADJUST"
  1143.   GOSUB "CHECK MENU"
  1144.   Undo=Undo+1:IF Undo=2 THEN Undo=0
  1145. RETURN
  1146.  
  1147. '------------------------------------------------------------
  1148.  
  1149. "SCHNEIDEN"
  1150.   FN Buffer
  1151.   CALL TECUT(Tehndl&)
  1152.   Tsize&=PEEK WORD(&AB0)
  1153.   CLEAR Tsize&
  1154.   Tadr&=PEEK LONG(PEEK LONG(&AB4))
  1155.   LONG IF Tsize&>0
  1156.     Err&=FN ZEROSCRAP
  1157.     Err&=FN PUTSCRAP(Tsize&,CVI(C$(8)),Tadr&)
  1158.   END IF
  1159.   GOSUB "SCROLL ADJUST"
  1160.   GOSUB "CHECK MENU"
  1161. RETURN
  1162.  
  1163. '------------------------------------------------------------
  1164.  
  1165. "KOPIEREN"
  1166.   CALL TECOPY(Tehndl&)
  1167.   Tsize&=PEEK WORD(&AB0)
  1168.   CLEAR Tsize&
  1169.   Tadr&=PEEK LONG(PEEK LONG(&AB4))
  1170.   Tlen&=PEEK WORD(&AB0)
  1171.   LONG IF Tlen&>0
  1172.     ERR&=FN ZEROSCRAP
  1173.     ERR&=FN PUTSCRAP(Tlen&,CVI(C$(8)),Tadr&)
  1174.   END IF
  1175. RETURN
  1176.  
  1177. '------------------------------------------------------------
  1178.  
  1179. "EINSETZEN"
  1180.   FN Buffer
  1181.   DEFSTR LONG
  1182.   CP&=USR 5(0)
  1183.   Len&=FN GETSCRAP(CP&,CVI(C$(8)),D&)
  1184.   LONG IF Len&+FN teWord(60)>VAL(C$(25))
  1185.     GOSUB "SCRAP TOO LARGE"
  1186.     GOTO "EVENT QUEUE"
  1187.   END IF
  1188.   LONG IF Len&>0
  1189.     Adr&=USR 3(CP&)
  1190.     CALL TEDELETE(Tehndl&)
  1191.     CALL TEINSERT(Adr&,Len&,Tehndl&)
  1192.   END IF
  1193.   X= USR 6(CP&)
  1194.   DEFSTR WORD
  1195.   Lines=FN teWord%(94)
  1196.   GOSUB "SCROLL ADJUST"
  1197.   Durty=1
  1198.   GOSUB "CHECK MENU"
  1199. RETURN
  1200.  
  1201. '------------------------------------------------------------
  1202.  
  1203. "LÖSCHEN"
  1204.   FN Buffer
  1205.   CALL TEDELETE(Tehndl&)
  1206.   GOSUB "SCROLL ADJUST"
  1207.   GOSUB "CHECK MENU"
  1208. RETURN
  1209.  
  1210. '------------------------------------------------------------
  1211.  
  1212. "AUSWAHL"
  1213.   textLen=FN teWord(60)
  1214.   CALL TESETSELECT(0,textLen,Tehndl&)
  1215. RETURN
  1216.  
  1217. '------------------------------------------------------------
  1218.  
  1219. "EXTRAS"
  1220. ON ITEMID GOTO "MAKROS","NO OP","FINDEN","NO OP","EINFÜGEN","UMBRUCH","NO OP","CR DAZU","CR WEG","NO OP","FOOTER","STATISTIK"
  1221.  
  1222. '------------------------------------------------------------
  1223.  
  1224. "MAKROS"
  1225.   CALL DELMENUITEM(BASHANDLE&,1)
  1226.   CALL DELMENUITEM(BASHANDLE&,1)
  1227.   IF Wptr&=0 THEN CALL ENABLEITEM(BASHANDLE&,0)
  1228.   Num=133
  1229.   GOSUB "CENTER DIALOG"
  1230.   POKE WORD &AFA,VAL(C$(17))
  1231.   Dloghndl&=FN GETNEWDIALOG(Num,0,-1)
  1232.   Dptr&=FN FRONTWINDOW
  1233.   CALL SETPORT(Dptr&)
  1234.   tehndl&=PEEK LONG(Dloghndl&+160)
  1235.   item=0
  1236.   NumtM=NumM
  1237.   FOR I=1 TO NumtM
  1238.     Nt$(I)=N$(I)
  1239.     Mt$(I)=M$(I)
  1240.   NEXT I
  1241.   DO
  1242.     item=item+1
  1243.     CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item))
  1244.   UNTIL ihndl&(item)=0 OR item=63
  1245.   CALL SETITEXT(ihndl&(5),Nt$(1))
  1246.   CALL SETITEXT(ihndl&(6),Mt$(1))
  1247.   CALL SETCTLVALUE(ihndl&(7),1)
  1248.   CALL SELITEXT(Dloghndl&,5,0,255)
  1249.   CURSOR=0
  1250.  
  1251. '-------------------------
  1252.  
  1253. "MAKROLOOP"
  1254.   CALL MODALDIALOG(0,REF)
  1255.   IF REF=9 OR REF=2 THEN "MAKROEND"
  1256.   IF REF=3 THEN "MAKRONEW"
  1257.   IF REF=4 THEN "MAKROCLEAR"
  1258.   IF REF=7 THEN "MAKRO"
  1259.   IF REF=6 THEN "MAKROEDIT"
  1260.   IF REF=1 THEN CALL TEKEY(13,tehndl&)
  1261. GOTO "MAKROLOOP"
  1262.  
  1263. '-------------------------
  1264.  
  1265. "MAKRONEW"
  1266.   NumtM=FN COUNTMITEMS(BASHANDLE&)
  1267.   LONG IF NumtM<50
  1268.     CALL GETITEXT(ihndl&(5),Menu$)
  1269.     FOR I=1 TO NumtM
  1270.       CALL GETITEM(BASHANDLE&,I,Old$)
  1271.       LONG IF Menu$=Old$
  1272.         CALL GETITEXT(ihndl&(6),Makro$)
  1273.         Mt$(I)=Makro$
  1274.         GOTO "MAKROLOOP"
  1275.       END IF
  1276.     NEXT I
  1277.     CALL HIDECONTROL(ihndl&(7))
  1278.     CALL GETITEXT(ihndl&(6),Makro$)
  1279.     CALL INSMENUITEM(BASHANDLE&,Menu$,NumtM)
  1280.     COLOR 0
  1281.     BOX FILL 268,15 TO 425,40
  1282.     COLOR -1
  1283.     NumtM=NumtM+1
  1284.     Nt$(NumtM)=Menu$
  1285.     Mt$(NumtM)=Makro$
  1286.     CALL SHOWCONTROL(ihndl&(7))
  1287.     CALL SETCTLVALUE(ihndl&(7),NumtM)
  1288.     CALL SELITEXT(Dloghndl&,5,0,255)
  1289.   XELSE
  1290.     BEEP
  1291.   END IF
  1292. GOTO "MAKROLOOP"
  1293.  
  1294. '-------------------------
  1295.  
  1296. "MAKROCLEAR"
  1297.   NumtM=FN COUNTMITEMS(BASHANDLE&)
  1298.   LONG IF NumtM>1
  1299.     N=FN GETCTLVALUE(ihndl&(7))
  1300.     CALL HIDECONTROL(ihndl&(7))
  1301.     CALL DELMENUITEM(BASHANDLE&,N)
  1302.     COLOR 0
  1303.     BOX FILL 268,15 TO 425,40
  1304.     COLOR -1
  1305.     NumtM=NumtM-1
  1306.     FOR I=N TO NumtM
  1307.       Mt$(I)=Mt$(I+1)
  1308.       Nt$(I)=Nt$(I+1)
  1309.     NEXT I
  1310.     CALL SETITEXT(ihndl&(5),Nt$(1))
  1311.     CALL SETITEXT(ihndl&(6),Mt$(1))
  1312.     CALL SETCTLVALUE(ihndl&(7),1)
  1313.     CALL SHOWCONTROL(ihndl&(7))
  1314.     CALL SELITEXT(Dloghndl&,5,0,255)
  1315.   XELSE
  1316.     BEEP
  1317.   END IF
  1318. GOTO "MAKROLOOP"
  1319.  
  1320. '-------------------------
  1321.  
  1322. "MAKROEDIT"
  1323.   CALL GETITEXT(ihndl&(6),Menu$)
  1324.   IF LEN(Menu$)>=255 THEN BEEP:CALL TEKEY(8,tehndl&)
  1325. GOTO "MAKROLOOP"
  1326.  
  1327. '-------------------------
  1328.  
  1329. "MAKRO"
  1330.   N=FN GETCTLVALUE(ihndl&(7))
  1331.   CALL SETITEXT(ihndl&(5),Nt$(N))
  1332.   CALL SETITEXT(ihndl&(6),Mt$(N))
  1333.   CALL SELITEXT(Dloghndl&,5,0,255)
  1334. GOTO "MAKROLOOP"
  1335.  
  1336. '-------------------------
  1337.  
  1338. "MAKROEND"
  1339.   LONG IF REF=9
  1340.     Mak=1
  1341.     NumM=NumtM
  1342.     FOR I=1 TO NumM
  1343.       N$(I)=Nt$(I)
  1344.       M$(I)=Mt$(I)
  1345.     NEXT I
  1346.   XELSE
  1347.     Mak=0
  1348.   END IF
  1349.   FOR I=1 TO NumM
  1350.     CALL DELMENUITEM(BASHANDLE&,1)
  1351.   NEXT I
  1352.   T$=C$(16)+C$(51)
  1353.   MENU 6,1,1,T$
  1354.   MENU 6,2,0,C$(18)
  1355.   FOR I=1 TO NumM
  1356.     CALL INSMENUITEM(BASHANDLE&,N$(I),I+1)
  1357.   NEXT I
  1358.   IF Wptr&=0 THEN CALL DISABLEITEM(BASHANDLE&,0)
  1359.   POKE WORD &AFA,0
  1360.   CALL DISPOSDIALOG(Dloghndl&)
  1361.   IF Wptr& THEN CALL SETPORT(Wptr&)
  1362.   IF Wptr& THEN GOSUB "UPDATE"
  1363.   GOTO "EVENT QUEUE"
  1364. RETURN
  1365.  
  1366. '------------------------------------------------------------
  1367.  
  1368. "FINDEN"
  1369.   Find$=C$(15):new&=0:fcount=0:rcount=0::old&=0
  1370.   CALL TESETSELECT(0,0,Tehndl&)
  1371.   CALL TESELVIEW(Tehndl&)
  1372.   CALL TEAUTOVIEW(-1,Tehndl&)
  1373.   But1=0:But2=0:But3=0
  1374.   Num=134
  1375.   GOSUB "CENTER DIALOG"
  1376.   POKE WORD &AFA,VAL(C$(17))
  1377.   Dloghndl&=FN GETNEWDIALOG(Num,0,-1)
  1378.   Dptr&=FN FRONTWINDOW
  1379.   CALL SETPORT(Dptr&)
  1380.   tehndl&=PEEK LONG(Dloghndl&+160)
  1381.   item=0
  1382.   DO
  1383.     item=item+1
  1384.     CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item))
  1385.   UNTIL ihndl&(item)=0 OR item=63
  1386.   CALL SELITEXT(Dloghndl&,5,0,255)
  1387.   CURSOR=0
  1388.  
  1389. '-------------------------------------
  1390.  
  1391. "FINDLOOP"
  1392.   CALL MODALDIALOG(0,REF)
  1393. "MATCH"
  1394.   LONG IF REF=2 OR REF=3
  1395.     CALL GETITEXT(ihndl&(5),Find$)
  1396.     T$=Find$
  1397.     GOSUB "CRTEST"
  1398.     Find$=T$
  1399.     CALL GETITEXT(ihndl&(6),Neu$)
  1400.     T$=Neu$
  1401.     GOSUB "CRTEST"
  1402.     Neu$=T$
  1403.     Alt$=Find$
  1404.     LONG IF But2=0
  1405.       Alt$=UCASE$(Alt$)
  1406.     END IF
  1407.     IF Copy$<>Alt$ THEN fcount=0:rcount=0:old&=0
  1408.     Copy$=Alt$
  1409.     GOTO "FIND NEW"
  1410.   END IF
  1411.   IF REF=4 THEN "FINDEND"
  1412.   IF REF=7 THEN "ALLNEW":fcount=0:rcount=0:old&=0
  1413.   IF REF=8 THEN "CASE":fcount=0:rcount=0:old&=0
  1414.   IF REF=9 THEN "WORD":fcount=0:rcount=0:old&=0
  1415.   IF REF=1 THEN CALL TEKEY(13,tehndl&)
  1416. GOTO "FINDLOOP"
  1417.  
  1418. '-------------------------------------
  1419.  
  1420. "CRTEST"
  1421. L=LEN(T$)
  1422. FOR I=1 TO L
  1423.   N=INSTR(I,UCASE$(T$),C$(48))
  1424.   LONG IF N
  1425.     T$=LEFT$(T$,N-1)+CHR$(13)+RIGHT$(T$,L-N-1)
  1426.     GOTO "CRTEST"
  1427.   END IF
  1428. NEXT I
  1429.  
  1430. "TABTEST"
  1431. L=LEN(T$)
  1432. FOR I=1 TO L
  1433.   N=INSTR(I,UCASE$(T$),C$(49))
  1434.   LONG IF N
  1435.     T$=LEFT$(T$,N-1)+CHR$(9)+RIGHT$(T$,L-N-1)
  1436.     GOTO "TABTEST"
  1437.   END IF
  1438. NEXT I
  1439.  
  1440. "LFTEST"
  1441. L=LEN(T$)
  1442. FOR I=1 TO L
  1443.   N=INSTR(I,UCASE$(T$),C$(50))
  1444.   LONG IF N
  1445.     T$=LEFT$(T$,N-1)+CHR$(10)+RIGHT$(T$,L-N-1)
  1446.     GOTO "LFTEST"
  1447.   END IF
  1448. NEXT I
  1449. RETURN
  1450.  
  1451. '-------------------------------------
  1452.  
  1453. "FIND NEW"
  1454.   LONG IF Find$=C$(15)
  1455.     Alert1$=C$(21)
  1456.     Alert2$=C$(15)
  1457.     GOSUB "ALERT"
  1458.     GOTO "FINDLOOP"
  1459.   END IF
  1460.   LONG IF Find$=Neu$ AND REF=3
  1461.     Alert1$=C$(23)
  1462.     Alert2$=C$(15)
  1463.     GOSUB "ALERT"
  1464.     GOTO "FINDLOOP"
  1465.   END IF
  1466.   flen&=LEN(Alt$)
  1467.   fadr&=VARPTR(Alt$)+1
  1468.   rlen&=LEN(Neu$)
  1469.   radr&=VARPTR(Neu$)+1
  1470.   chndl&=FN TEGETTEXT(Tehndl&)
  1471.   clen&=FN GETHANDLESIZE(chndl&)
  1472.   IF REF=3 THEN GOTO "REPLACE"
  1473.  
  1474. '-------------------------------------
  1475.  
  1476. "FIND"
  1477.   IF But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&)
  1478.   new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&)
  1479.   LONG IF new&>=0
  1480.     FN Word
  1481.     LONG IF But1=0
  1482.       CALL MODALDIALOG(0,REF)
  1483.       IF REF<>2 THEN GOTO "MATCH"
  1484.     END IF
  1485.     fcount=fcount+1
  1486.     old&=new&+flen&
  1487.     GOTO "FIND"
  1488.   XELSE
  1489.     LONG IF fcount
  1490.       Alert1$=STR$(fcount)
  1491.       Alert2$=C$(19)
  1492.     XELSE
  1493.       Alert1$=CHR$(34)+Find$+CHR$(34)
  1494.       Alert2$=C$(22)
  1495.     END IF
  1496.     GOSUB "ALERT"
  1497.     old&=0
  1498.     fcount=0
  1499.     rcount=0
  1500.     CALL TESETSELECT(0,0,Tehndl&)
  1501.     CALL TEAUTOVIEW(-1,Tehndl&)
  1502.   END IF
  1503. GOTO "FINDLOOP"
  1504.  
  1505. '-------------------------------------
  1506.  
  1507. "REPLACE"
  1508.   IF FN teWord%(60)+rlen&>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "FINDLOOP"
  1509.   IF But1=1 THEN CALL TEAUTOVIEW(0,Tehndl&)
  1510.   new&=FN MUNGER(chndl&,old&,fadr&,flen&,0,rlen&)
  1511.   LONG IF new&>=0
  1512.     FN Word
  1513.     LONG IF But1=0
  1514.       CALL MODALDIALOG(0,REF)
  1515.       IF REF<>3 THEN GOTO "MATCH"
  1516.     END IF
  1517.     CALL TEDELETE(Tehndl&)
  1518.     CALL TEINSERT(radr&,rlen&,Tehndl&)
  1519.     CALL TESETSELECT(new&+flen&,new&+rlen&,Tehndl&)
  1520.     chndl&=FN TEGETTEXT(Tehndl&)
  1521.     clen&=FN GETHANDLESIZE(chndl&)
  1522.     old&=new&+rlen&
  1523.     rcount=rcount+1
  1524.     GOTO "REPLACE"
  1525.   XELSE
  1526.     LONG IF rcount
  1527.       Alert1$=STR$(rcount)
  1528.       Alert2$=C$(20)
  1529.     XELSE
  1530.       Alert1$=CHR$(34)+Find$+CHR$(34)
  1531.       Alert2$=C$(22)
  1532.     END IF
  1533.     GOSUB "ALERT"
  1534.     old&=0
  1535.     fcount=0
  1536.     rcount=0
  1537.     CALL TESETSELECT(0,0,Tehndl&)
  1538.     CALL TEAUTOVIEW(-1,Tehndl&)
  1539.   END IF
  1540. GOTO "FINDLOOP"
  1541.  
  1542. '-------------------------------------
  1543.  
  1544. "ALLNEW"
  1545.   But1=FN GETCTLVALUE(ihndl&(7))
  1546.   IF But1=1 THEN But1=0 ELSE But1=1
  1547.   CALL SETCTLVALUE(ihndl&(7),But1)
  1548. GOTO "FINDLOOP"
  1549.  
  1550. "CASE"
  1551.   But2=FN GETCTLVALUE(ihndl&(8))
  1552.   IF But2=1 THEN But2=0 ELSE But2=1
  1553.   CALL SETCTLVALUE(ihndl&(8),But2)
  1554. GOTO "FINDLOOP"
  1555.  
  1556. "WORD"
  1557.   But3=FN GETCTLVALUE(ihndl&(9))
  1558.   IF But3=1 THEN But3=0 ELSE But3=1
  1559.   CALL SETCTLVALUE(ihndl&(9),But3)
  1560. GOTO "FINDLOOP"
  1561.  
  1562. '-------------------------------------
  1563.  
  1564. "FINDEND"
  1565.   POKE WORD &AFA,0
  1566.   CALL DISPOSDIALOG(Dloghndl&)
  1567.   CALL SETPORT(Wptr&)
  1568.   GOSUB "UPDATE"
  1569.   GOSUB "SCROLL ADJUST"
  1570.   SCROLL BUTTON 1,0
  1571.   CALL TESETSELECT(0,0,Tehndl&)
  1572.   CALL TEAUTOVIEW(0,Tehndl&)
  1573.   Durty=1
  1574.   GOTO "EVENT QUEUE"
  1575. RETURN
  1576.  
  1577. '------------------------------------------------------------
  1578.  
  1579. "EINFÜGEN"
  1580.   IF Insert=0 THEN Insert=1:MENU 3,8,1 ELSE Insert=0:MENU 3,8,2
  1581. RETURN
  1582.  
  1583. '------------------------------------------------------------
  1584.  
  1585. "UMBRUCH"
  1586.   LONG IF Wrap=1
  1587.     POKE WORD PEEK LONG(Tehndl&)+72,-1
  1588.     Wrap=0
  1589.     MENU 3,6,1
  1590.   XELSE
  1591.     POKE WORD PEEK LONG(Tehndl&)+72,0
  1592.     Wrap=1
  1593.     MENU 3,6,2
  1594.   END IF
  1595.   Mark=2
  1596.   GOSUB "FORMAT WINDOW"
  1597.   CALL TEPINSCROLL(0,0,Tehndl&)
  1598.   Bxold=0
  1599.   SCROLL BUTTON 2,0,0,1440/Unit,5,,2
  1600. RETURN
  1601.  
  1602. '------------------------------------------------------------
  1603.  
  1604. "CR DAZU"
  1605.   CR=1
  1606.   FN Format
  1607.   GOSUB "FORMAT WINDOW"
  1608. RETURN
  1609.  
  1610. '------------------------------------------------------------
  1611.  
  1612. "CR WEG"
  1613.   CR=0
  1614.   FN Format
  1615.   GOSUB "FORMAT WINDOW"
  1616. RETURN
  1617.  
  1618. '------------------------------------------------------------
  1619.  
  1620. "FOOTER"
  1621.   LONG IF footer=1
  1622.     footer=0
  1623.     MENU 3,11,1
  1624.   XELSE
  1625.     footer=1
  1626.     MENU 3,11,2
  1627.   END IF
  1628. RETURN
  1629.  
  1630. '------------------------------------------------------------
  1631.  
  1632. "STATISTIK"
  1633.   Num=137
  1634.   GOSUB "CENTER DIALOG"
  1635.   Dloghndl&=FN GETNEWDIALOG(Num,0,-1)
  1636.   Dptr&=FN FRONTWINDOW
  1637.   CALL SETPORT(Dptr&)
  1638.   item=0
  1639.   DO
  1640.     item=item+1
  1641.     CALL GETDITEM(Dloghndl&,item,itype(item),ihndl&(item),irect$(item))
  1642.   UNTIL ihndl&(item)=0 OR item=63
  1643.   CURSOR=0
  1644.  
  1645. '-------------------------------------
  1646.  
  1647. "STATLOOP"
  1648.   Num1$=STR$(FN teWord%(94))+C$(26)
  1649.   Num2$=STR$(FN teWord%(60))+C$(26)
  1650.   Num3$=STR$(MEM(-2)/1000)+C$(24)
  1651.   Num4$=STR$(MEM(-1)/1000)+C$(24)
  1652.   CALL PARAMTEXT(Num1$,Num2$,Num3$,Num4$)
  1653.   CALL DRAWDIALOG(Dloghndl&)
  1654.   CALL MODALDIALOG(0,REF)
  1655.   IF REF=1 THEN "STATEND"
  1656. GOTO "STATLOOP"
  1657.  
  1658. "STATEND"
  1659.   CALL DISPOSDIALOG(Dloghndl&)
  1660.   CALL SETPORT(Wptr&)
  1661.   GOSUB "UPDATE"
  1662.   GOTO "EVENT QUEUE"
  1663. RETURN
  1664.  
  1665. '************************************************************
  1666.  
  1667. "FONT"
  1668.   FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&)
  1669.     MENU 4,X,1
  1670.   NEXT X
  1671.   CALL GETITEM(FONTHANDLE&,ITEMID,FONTNAME$)
  1672.   CALL GETFNUM(FONTNAME$,FONTNUMBER)
  1673.   MENU 4,ITEMID,2
  1674.  
  1675. "OUTLINE"
  1676.   FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&)
  1677.     CALL GETITEM(SIZEHANDLE&,X,SIZE$):SIZE=VAL(SIZE$)
  1678.     CALL SETITEMSTYLE(SIZEHANDLE&,X,0)
  1679.     LONG IF FN REALFONT(FONTNUMBER,SIZE)
  1680.       CALL SETITEMSTYLE(SIZEHANDLE&,X,8)
  1681.     END IF
  1682.   NEXT
  1683.   GOSUB "NEW TEXT"
  1684. RETURN
  1685.  
  1686. '------------------------------------------------------------
  1687.  
  1688. "GRÖßE"
  1689.   CALL GETITEM(SIZEHANDLE&,ITEMID,SIZE$)
  1690.   LONG IF ITEMID<10
  1691.     FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&)
  1692.       MENU 5,X,1
  1693.     NEXT X
  1694.     MENU 5,ITEMID,2
  1695.     FONTSIZE= VAL(SIZE$)
  1696.   END IF
  1697.   GOSUB "NEW TEXT"
  1698. RETURN
  1699.  
  1700. '------------------------------------------------------------
  1701.  
  1702. "BASIC"
  1703.   FN Buffer
  1704.   LONG IF ITEMID>2
  1705.     Adr&=VARPTR(M$(ITEMID-2))+1
  1706.     Len&=LEN(M$(ITEMID-2))
  1707.   XELSE
  1708.     Hndl&=FN Res&(C$(8),128)
  1709.     Adr&=PEEK LONG(Hndl&)
  1710.     Len&=FN SIZERESOURCE(Hndl&)
  1711.   END IF
  1712.   IF FN teWord%(60)+Len&>VAL(C$(25)) THEN GOSUB "ZU LANG":GOTO "EVENT QUEUE"
  1713.   CALL TEINSERT(Adr&,Len&,Tehndl&)
  1714.   GOSUB "SCROLL ADJUST"
  1715.   Durty=1
  1716.   GOSUB "CHECK MENU"
  1717. RETURN
  1718. SEGMENT
  1719. '************************************************************
  1720. '                     • BUILD THE MENU • 
  1721. '************************************************************
  1722.  
  1723. "SET MENU"
  1724.   Mlist&=FN GETNEWMBAR(128)
  1725.   CALL SETMENUBAR(Mlist&)
  1726.   CALL DRAWMENUBAR
  1727.  
  1728.   DAHANDLE&=FN GETMENU(128)
  1729.   EDITHANDLE&=FN GETMENU(2)
  1730.   FONTHANDLE&=FN GETMENU(4)
  1731.   SIZEHANDLE&=FN GETMENU(5)
  1732.   BASHANDLE&=FN GETMENU(6)
  1733.  
  1734.   LONG IF FN COUNTMITEMS(DAHANDLE&)=3
  1735.     CALL ADDRESMENU(DAHANDLE&,CVI(C$(12)))
  1736.   END IF
  1737.  
  1738.   FONTNAME$=C$(4)
  1739.   CALL ADDRESMENU (FONTHANDLE&,CVI(C$(9)))
  1740.   FOR X=1 TO FN COUNTMITEMS(FONTHANDLE&)
  1741.     CALL GETITEM(FONTHANDLE&,X,FONTNAME$)
  1742.     IF FONTNAME$=C$(4) THEN MENU 4,X,2
  1743.   NEXT X
  1744.  
  1745.   FONTSIZE=VAL(C$(5))
  1746.   FOR X=1 TO FN COUNTMITEMS(SIZEHANDLE&)
  1747.     CALL GETITEM(SIZEHANDLE&,X,SIZE$)
  1748.     IF FONTSIZE=VAL(SIZE$) THEN MENU 5,X,2
  1749.   NEXT X
  1750.   CALL GETFNUM(C$(4),FONTNUMBER)
  1751.   GOSUB "OUTLINE"
  1752.  
  1753.   FOR I=1 TO NumM
  1754.       CALL INSMENUITEM(BASHANDLE&,N$(I),I+1)
  1755.   NEXT I
  1756. RETURN
  1757.  
  1758. '************************************************************
  1759. '              • CHECK MENU-ATTRIBUTES • 
  1760. '************************************************************
  1761.  
  1762. "CHECK MENU"
  1763.   LONG IF Tehndl&
  1764.     Choose=FN teWord(34)-FN teWord(32)
  1765.     LONG IF Choose=0 
  1766.       MENU 2,3,0
  1767.       MENU 2,4,0
  1768.       MENU 2,6,0
  1769.     XELSE
  1770.       MENU 2,3,1
  1771.       MENU 2,4,1
  1772.       MENU 2,6,1
  1773.     END IF
  1774.   END IF
  1775.   CP&=USR 5(0)
  1776.   Scrap&=FN GETSCRAP(CP&,CVI(C$(8)),D&)
  1777.   IF Scrap&>0 THEN MENU 2,5,1 ELSE MENU 2,5,0
  1778.   X= USR 6(CP&)
  1779.   LONG IF Durty=0 AND textLen=0
  1780.     MENU 1,5,0
  1781.     MENU 1,10,0
  1782.     MENU 2,8,0
  1783.     MENU 3,3,0
  1784.     MENU 3,8,0
  1785.     MENU 3,9,0
  1786.   XELSE
  1787.     MENU 1,5,1
  1788.     MENU 1,10,1
  1789.     MENU 2,8,1
  1790.     MENU 3,3,1
  1791.     MENU 3,8,1
  1792.     MENU 3,9,1
  1793.   END IF
  1794. RETURN
  1795.  
  1796. '************************************************************
  1797. '              • CHANGE MENU-ATTRIBUTES • 
  1798. '************************************************************
  1799.  
  1800. "CHANGE MENU"
  1801.   LONG IF Wptr&
  1802.     MENU 1,3,1
  1803.     MENU 1,5,1
  1804.     MENU 1,6,1
  1805.     MENU 1,7,1
  1806.     MENU 1,8,1
  1807.     MENU 1,9,1
  1808.     MENU 1,10,1
  1809.     MENU 3,3,1
  1810.     MENU 3,5,1
  1811.     MENU 3,6,1
  1812.     MENU 3,8,1
  1813.     MENU 3,9,1
  1814.     MENU 3,11,1
  1815.     MENU 3,12,1
  1816.     CALL ENABLEITEM(EDITHANDLE&,0)
  1817.     CALL ENABLEITEM(FONTHANDLE&,0)
  1818.     CALL ENABLEITEM(SIZEHANDLE&,0)
  1819.     CALL ENABLEITEM(BASHANDLE&,0)
  1820.   XELSE
  1821.     MENU 1,3,0
  1822.     MENU 1,5,0
  1823.     MENU 1,6,0
  1824.     MENU 1,7,0
  1825.     MENU 1,8,0
  1826.     MENU 1,9,0
  1827.     MENU 1,10,0
  1828.     MENU 3,3,0
  1829.     MENU 3,5,0
  1830.     MENU 3,6,0
  1831.     MENU 3,8,0
  1832.     MENU 3,9,0
  1833.     MENU 3,11,0
  1834.     MENU 3,12,0
  1835.     CALL DISABLEITEM(EDITHANDLE&,0)
  1836.     CALL DISABLEITEM(FONTHANDLE&,0)
  1837.     CALL DISABLEITEM(SIZEHANDLE&,0)
  1838.     CALL DISABLEITEM(BASHANDLE&,0)
  1839.   END IF
  1840.   CALL DRAWMENUBAR
  1841. RETURN
  1842.  
  1843. '************************************************************
  1844. '              • CHANGE TEXT-ATTRIBUTES • 
  1845. '************************************************************
  1846.  
  1847. "NEW TEXT"
  1848.   TEXT FONTNUMBER,FONTSIZE,FONTSTYLE,FONTMODE
  1849.   POKE WORD PEEK LONG(Tehndl&)+74,FONTNUMBER
  1850.   POKE WORD PEEK LONG(Tehndl&)+78,1
  1851.   POKE WORD PEEK LONG(Tehndl&)+80,FONTSIZE
  1852.   CALL GETFONTINFO(Ascent%)
  1853.   Hoch=Ascent+Descent+Leading
  1854.   POKE WORD PEEK LONG(Tehndl&)+24,Hoch
  1855.   POKE WORD PEEK LONG(Tehndl&)+26,Ascent
  1856.   IF VL>=12 THEN POKE WORD PEEK LONG(Tehndl&)+10,left
  1857.   POKE WORD PEEK LONG(Tehndl&)+14,right
  1858.   POKE WORD PEEK LONG(Tehndl&)+2,left
  1859.   POKE WORD PEEK LONG(Tehndl&)+6,right
  1860.   CALL INVALRECT(VT)
  1861.   IF Start=0 THEN Mark=2
  1862. RETURN
  1863.  
  1864. '************************************************************
  1865. '              • PUT GRAPHICS & TEXT IN WINDOW • 
  1866. '************************************************************
  1867.  
  1868. "FORMAT WINDOW"
  1869.  
  1870. CALL PENNORMAL
  1871.  
  1872. LONG IF Wptr&
  1873.   LONG IF Mark=0
  1874.     GOSUB "PICT"
  1875.   END IF
  1876.  
  1877. "SHORT UPDATE"
  1878.   FN Markposition
  1879.   Zeilen=(WINDOW(3)-30)/Hoch
  1880.   Seite=Zeilen*Hoch
  1881.   Rand=WINDOW(3)-25-Seite
  1882.   VT=25:VL=posleft:VB=WINDOW(3)-Rand:VR=posright
  1883.   DT=VT:DL=VL:DB=VB:DR=VR
  1884.   POKE WORD PEEK LONG(Tehndl&),DT
  1885.   POKE WORD PEEK LONG(Tehndl&)+2,DL
  1886.   POKE WORD PEEK LONG(Tehndl&)+4,DB
  1887.   POKE WORD PEEK LONG(Tehndl&)+6,DR
  1888.   POKE WORD PEEK LONG(Tehndl&)+8,VT
  1889.   IF VL>=12 THEN POKE WORD PEEK LONG(Tehndl&)+10,VL
  1890.   POKE WORD PEEK LONG(Tehndl&)+12,VB
  1891.   POKE WORD PEEK LONG(Tehndl&)+14,VR
  1892.   AT=25:AL=4:AB=WINDOW(3)-1:AR=WINDOW(2)-1
  1893.   CALL CLIPRECT(AT)
  1894.   CALL ERASERECT(AT)
  1895.   CALL TESCROLL(0,-Hoch*BUTTON(1),Tehndl&)
  1896.   CALL TECALTEXT(Tehndl&)
  1897.   CALL TEUPDATE(VT,Tehndl&)
  1898.   GOSUB "SCROLL ADJUST"
  1899.   Mark=0
  1900. END IF
  1901. IF Start=1 THEN Start=0
  1902.  
  1903. RETURN
  1904.  
  1905. '************************************************************
  1906. '                     • WINDOW ROUTINES • 
  1907. '************************************************************
  1908.  
  1909. "BUILD WINDOW"
  1910.   GOSUB "CALC SCREEN"
  1911.   T=ST+40:L=SL+3:B=SB-3:R=SR-3
  1912.   WINDOW 1,C$(3),(L,T)-(R,B),9
  1913.   Wptr&=FN FRONTWINDOW
  1914.   CALL SETPORT(Wptr&)
  1915.   Bold=0
  1916.   Bnew=0
  1917.   Bxnew=0
  1918.   Mark=0
  1919.   Unit=VAL(C$(46))
  1920.   Off=VAL(C$(44))
  1921.   right=VAL(C$(45))
  1922.   FONTSTYLE=0
  1923.   FONTMODE=0
  1924.   CALL GETFONTINFO(Ascent%)
  1925.   Hoch=Ascent+Descent+Leading
  1926.   GOSUB"BUILD EDITS"
  1927.   GOSUB "NEW TEXT"
  1928. RETURN
  1929.  
  1930. '************************************************************
  1931. '             • CREATE EDIT FIELDS AND BUTTONS • 
  1932. '************************************************************
  1933.  
  1934. "BUILD EDITS"
  1935.   LONG IF Wptr&
  1936.     PICTURE ON
  1937.       PLOT 0,12 TO WINDOW(2)-1,12
  1938.     PICTURE OFF,Upict&
  1939.     Zeilen=(WINDOW(3)-30)/Hoch
  1940.     Seite=Zeilen*Hoch
  1941.     Rand=WINDOW(3)-25-Seite
  1942.     left=Off:right=VAL(C$(45))
  1943.     VT=25:VL=left:VB=WINDOW(3)-Rand:VR=right
  1944.     DT=VT:DL=VL:DB=VB:DR=VR
  1945.     Tehndl&=FN TENEW(DT,VT)
  1946.     POKE WORD PEEK LONG(Tehndl&)+72,-1
  1947.     CALL TEACTIVATE(Tehndl&)
  1948.     GOSUB "SCROLL ADJUST"
  1949.   END IF
  1950. RETURN
  1951. '************************************************************
  1952.  
  1953. "INFO"
  1954.   DEF MOUSE=0
  1955.   Num=128:GOSUB "CENTER DIALOG"
  1956.   CURSOR=0
  1957.   Dloghndl&=FN GETNEWDIALOG(128,0,-1)
  1958.   Dptr&=FN FRONTWINDOW
  1959.   CALL SETPORT(Dptr&)
  1960.   CALL DRAWDIALOG(Dloghndl&)
  1961.   CALL HILITEWINDOW(Wptr&,-1)
  1962.   DO
  1963.     FT=7:FL=8:FB=37:FR=38
  1964.     DELAY VAL(C$(38))
  1965.     CALL INVERTRECT(FT)
  1966.   UNTIL MOUSE(3)
  1967.   CALL DISPOSDIALOG(Dloghndl&)
  1968.   IF Wptr& THEN CALL SETPORT(Wptr&)
  1969.   IF Wptr& THEN GOSUB "UPDATE"
  1970.   DEF MOUSE=1
  1971. RETURN
  1972.  
  1973. '------------------------------------------------------------
  1974.  
  1975. "HELP"
  1976.   Num=138:GOSUB "CENTER DIALOG"
  1977.   POKE WORD(&AFA),40
  1978.   Dloghndl&=FN GETNEWDIALOG(138,0,-1)
  1979.   Dptr&=FN FRONTWINDOW
  1980.   CALL SETPORT(Dptr&)
  1981.   tehndl&=PEEK LONG(Dloghndl&+160)
  1982.   tnum=129
  1983.   CALL DRAWDIALOG(Dloghndl&)
  1984.   h=0
  1985. GOTO "HELPTEXT"
  1986.  
  1987. "HELPLOOP"
  1988.   CALL GETKEYS(K%(1))
  1989.   IF K%(8)=16 THEN REF=2:GOTO "HCHECK"
  1990.   IF K%(8)=8 THEN REF=3:GOTO "HCHECK"
  1991.   CALL MODALDIALOG(0,REF)
  1992. "HCHECK"
  1993.   CALL HILITEMENU(0)
  1994.   IF REF=1 THEN "HELPEND"
  1995.   IF REF=2 OR REF=3 THEN "HELPTEXT"
  1996. GOTO "HELPLOOP"
  1997.  
  1998. "HELPTEXT"
  1999.   CALL TESETSELECT(0,0,tehndl&)
  2000.   IF REF=2 THEN tnum=tnum+1:IF tnum=135 THEN tnum=129
  2001.   IF REF=3 THEN tnum=tnum-1:IF tnum=128 THEN tnum=134
  2002.   LONG IF tnum=134
  2003.     CALL HILITEMENU(6)
  2004.   XELSE
  2005.     IF tnum>129 THEN CALL HILITEMENU(tnum-129) ELSE CALL HILITEMENU(128)
  2006.   END IF
  2007.   Hndl&=FN Res&(C$(8),tnum)
  2008.   Len&=FN SIZERESOURCE(Hndl&)
  2009.   CALL GETRESINFO(Hndl&,id,type&,Name$)
  2010.   CALL SETWTITLE(Dptr&,Name$)
  2011.   Adr&=USR 3(Hndl&)
  2012.   CALL TESETTEXT(Adr&,Len&,tehndl&)
  2013.   CALL TESETSELECT(0,0,tehndl&)
  2014.   Adr&=USR 7(Hndl&)
  2015.   IF h THEN CALL DRAWDIALOG(Dloghndl&)
  2016.   h=h+1
  2017. GOTO "HELPLOOP"
  2018.  
  2019. "HELPEND"
  2020.   POKE WORD(&AFA),0
  2021.   CALL DISPOSDIALOG(Dloghndl&)
  2022.   IF Wptr& THEN CALL SETPORT(Wptr&)
  2023.   IF Wptr& THEN GOSUB "UPDATE"
  2024. GOTO "EVENT QUEUE"
  2025.  
  2026. '------------------------------------------------------------
  2027.  
  2028. "FILE TOO LARGE"
  2029.   POKE WORD &AFA,0
  2030.   BEEP
  2031.   Num=129:GOSUB "CENTER DIALOG"
  2032.   Dloghndl&=FN GETNEWDIALOG(129,0,-1)
  2033.   CALL PARAMTEXT(F$,Alert$,C$(15),C$(15))
  2034.   CURSOR=0
  2035.   CALL MODALDIALOG(0,REF)
  2036.   CALL DISPOSDIALOG(Dloghndl&)
  2037.   WINDOW 1,F$
  2038.   GOSUB "UPDATE"
  2039. RETURN
  2040.  
  2041. '------------------------------------------------------------
  2042.  
  2043. "SCRAP TOO LARGE"
  2044.   POKE WORD &AFA,0
  2045.   BEEP
  2046.   Num=130:GOSUB "CENTER DIALOG"
  2047.   Dloghndl&=FN GETNEWDIALOG(130,0,-1)
  2048.   CALL PARAMTEXT(F$,C$(15),C$(15),C$(15))
  2049.   CURSOR=0
  2050.   CALL MODALDIALOG(0,REF)
  2051.   CALL DISPOSDIALOG(Dloghndl&)
  2052.   GOSUB "UPDATE"
  2053. RETURN
  2054.  
  2055. '------------------------------------------------------------
  2056.  
  2057. "SAVE ALERT"
  2058.   POKE WORD &AFA,0
  2059.   LONG IF Durty=1
  2060.     BEEP
  2061.     Num=131:GOSUB "CENTER DIALOG"
  2062.     Dloghndl&=FN GETNEWDIALOG(131,0,-1)
  2063.     CALL GETWTITLE(Wptr&,F$)
  2064.     CALL PARAMTEXT(F$,C$(15),C$(15),C$(15))
  2065.     CURSOR=0
  2066.     CALL MODALDIALOG(0,REF)
  2067.     CALL DISPOSDIALOG(Dloghndl&)
  2068.     GOSUB "UPDATE"
  2069.     IF REF=3 THEN "EVENT QUEUE"
  2070.     LONG IF REF=1
  2071.       LONG IF F$=C$(3)
  2072.         GOSUB "SICHERN"
  2073.       END IF
  2074.     END IF
  2075.   END IF
  2076. RETURN
  2077.  
  2078. '------------------------------------------------------------
  2079.  
  2080. "ALERT"
  2081.   Num=135:GOSUB "CENTER DIALOG"
  2082.   POKE WORD &AFA,0
  2083.   hndl&=FN GETNEWDIALOG(135,0,-1)
  2084.   Dptr&=FN FRONTWINDOW
  2085.   CALL SETPORT(Dptr&)
  2086.   BEEP
  2087.   CALL PARAMTEXT(Alert1$,Alert2$,C$(15),C$(15))
  2088.   CALL TESETSELECT(0,0,Tehndl&)
  2089.   CALL DRAWDIALOG(hndl&)
  2090.   DELAY 1000
  2091.   CALL SETPORT(Wptr&)
  2092.   POKE WORD &AFA,VAL(C$(17))
  2093.   CALL DISPOSDIALOG(hndl&)
  2094. RETURN
  2095.  
  2096. '------------------------------------------------------------
  2097.  
  2098. "ZU LANG"
  2099.   Num=136:GOSUB "CENTER DIALOG"
  2100.   POKE WORD &AFA,0
  2101.   hndl&=FN GETNEWDIALOG(136,0,-1)
  2102.   Dptr&=FN FRONTWINDOW
  2103.   CALL SETPORT(Dptr&)
  2104.   BEEP
  2105.   CALL DRAWDIALOG(hndl&)
  2106.   DELAY 1000
  2107.   CALL SETPORT(Wptr&)
  2108.   POKE WORD &AFA,VAL(C$(17))
  2109.   CALL DISPOSDIALOG(hndl&)
  2110. RETURN
  2111.  
  2112. '------------------------------------------------------------
  2113.  
  2114. "PICT"
  2115.   PICTURE(0,0),Upict&
  2116.   Lin&=FN Lineal(Unit,Bxnew)
  2117.   PICTURE,Lin&
  2118.   FN Markposition
  2119. RETURN
  2120.  
  2121. '------------------------------------------------------------
  2122.  
  2123. "UPDATE"
  2124.   LONG IF Wptr&
  2125.     CALL BEGINUPDATE(Wptr&)
  2126.     CALL TEUPDATE(T,Tehndl&)
  2127.     CALL ENDUPDATE(Wptr&)
  2128.   END IF
  2129. RETURN
  2130.  
  2131. '************************************************************
  2132.  
  2133.